/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package byblos.apresentacao.site;

import byblos.apresentacao.idioma.InterceptadorIdioma;
import byblos.negocio.Idioma;
import byblos.negocio.objeto.Objeto;
import byblos.negocio.objeto.TipoObjeto;
import byblos.negocio.pacote.Pacote;
import byblos.negocio.tela.FabricaTela;
import byblos.negocio.tela.Tela;
import byblos.negocio.tela.TipoTela;
import byblos.persistencia.DAO;
import byblos.util.Util;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Random;
import org.vraptor.annotations.Component;
import org.vraptor.annotations.In;
import org.vraptor.annotations.InterceptedBy;
import org.vraptor.annotations.Out;

/**
 *
 * @author Diego
 */
@Component
@InterceptedBy(InterceptadorIdioma.class)
public class SiteComponent {

    @In
    private Idioma idioma;
    @Out
    private String display;
    @Out
    private String tituloTexto;
    @Out
    private String texto;
    @Out
    private List<Objeto> objetos;
    @Out
    private int idPacote;

    public void home() {
        if (new Random().nextBoolean()) {
            // para pacote            
            List<Pacote> pacotes = new DAO().listar(Pacote.class, "PacotePorIdiomaHome", idioma);
            if (pacotes.size() > 0) {
                Pacote pacote = pacotes.get(Util.getRandom(pacotes.size()));
                display = pacote.getDisplay();
                tituloTexto = pacote.getTituloDescricao();
                texto = pacote.getTextoHome();
                idPacote = pacote.getId();
                return;
            }
        }

        Tela tela = FabricaTela.getTela(TipoTela.HOME, idioma, null);
        int quantidadeDisplays = tela.getGaleria().getFotos().size();
        if (quantidadeDisplays > 0) {
            int aleatorio = Util.getRandom(quantidadeDisplays);
            display = tela.getGaleria().getFotos().get(aleatorio).getCaminho();
        }
        tituloTexto = tela.getTituloTexto();
        texto = tela.getTexto();
        return;
    }

    public void redirectHome() {
    }

    public void acomodacao() {
        prepararTela(TipoTela.ACOMODACAO, TipoObjeto.ACOMODACAO);

    }

    public void pacote() {
        prepararTela(TipoTela.PACOTE, TipoObjeto.PACOTE);
    }

    public void atracaobuzios() {
        prepararTela(TipoTela.ATRACAO, TipoObjeto.ATRACAO);
    }

    public void gastronomia() {
        prepararTela(TipoTela.GASTRONOMIA, TipoObjeto.GASTRONOMIA);
    }

    public void servico() {
        prepararTela(TipoTela.SERVICO, TipoObjeto.SERVICO);
    }

    private void prepararTela(TipoTela tipoTela, TipoObjeto tipoObjeto) {
        Tela tela = FabricaTela.getTela(tipoTela, idioma, null);
        display = tela.getDisplay();
        tituloTexto = tela.getTituloTexto();
        texto = tela.getTexto();
        System.out.println("tipoTela " + tipoTela);
        System.out.println("tipoObjeto " + tipoTela.getTipoObjeto());
        if(tipoObjeto == TipoObjeto.PACOTE){
            objetos = (List<Objeto>) new DAO().listar(tipoObjeto.getClasse(), "PacotePorIdioma", idioma);
        } else {
            objetos = (List<Objeto>) new DAO().listar(tipoObjeto.getClasse(), "ObjetoPorTipoIdioma", tipoObjeto, idioma);
        }
        
        Collections.sort(objetos, new ComparadorObjeto());
        System.out.println("objetos.size()" + objetos.size());
    }

    private class ComparadorObjeto implements Comparator<Objeto> {

        public int compare(Objeto objeto1, Objeto objeto2) {
            Integer id1 = objeto1.getId();
            Integer id2 = objeto2.getId();
            return id2.compareTo(id1);
        }
    }
}

